package com.info.zhiduoduo.pay.sdk.alipaysdk.constant;

import com.info.zhiduoduo.common.constants.EnumFindHelper;
import com.info.zhiduoduo.pay.configs.alipay.*;
import com.info.zhiduoduo.pay.configs.alipay.base.BaseAlipayConfig;

/**
 * 列举智多多平台使用的支付宝安全发功能的签约主体企业支付宝, 指定该企业支付宝账户的需要使用的配置类, 配置类中记录该企业支付宝账户id,密钥等.
 * <p> <b>ISV主体:</b> 作为业务的平台方, 委托人和受托人都需要与它进行签约授权. 授权后就拥有操作管理委托人和受托人的资金记账本的权限, 从而进行代付到自然人支付宝账户或银行卡, 比如: 秀圣企业支付宝
 * <p> <b>委托人:</b> 用工企业支付宝, 比如: 明圣/智圣/法圣/信圣/九歌企业支付宝账户
 * <p> <b>受托人:</b> 人资公司企业支付宝账户, 资金通过受托人的记账本代付给自然人, 比如: 创客的企业支付宝账户
 * <p> --
 * <p> 业务流程:
 * <p> 1.委托人和受托人与ISV主体进行签约, 并分别创建各自的虚拟资金记账本.
 * <p> 2.发布项目后, 委托人给自己的资金记账本充值, 然后将对应的项目金额转账给受托人的资金记账本.
 * <p> 3.受托人将项目金额代付给自然人的支付宝账户或银行卡.
 * <p> 以上3步都是通过ISV主体调用接口的方式完成.
 */
public enum AlipayTransPrincipalEnum {

	UNKOWN(0, "", null),
	XIUSHENG(1, "上海秀圣信息技术有限公司", null),
	ZHISHENG(2, "智圣（天津）网络科技有限公司", ZhishengAlipayConfig.class),
	MINGSHENG(3, "宁夏明圣科技发展有限公司", MingshengAlipayConfig.class),
	JIUGE(4, "天津四如科技发展有限公司", SiruAlipayConfig.class),
	YINGSHENG(5, "芜湖英圣集群注册托管有限公司", null),
	FASHENG(6, "徐州法圣信息技术有限公司", null),
	XINSHENG(7, "芜湖信圣科技发展有限公司", XinshengAlipayConfig.class),
	MEISHENG(8, "宁波美圣科技发展有限公司", null),
	RUSHAN(9, "盐城如山数字科技有限公司", RushanAlipayConfig.class),
	RUHUO(10, "宁夏如火营销策划有限公司", RuhuoAlipayConfig.class),
	RUFENG(11, "青岛如风企业发展服务有限公司", RufengAlipayConfig.class),
	;

	/** principalId, 主体id, 即zdd_maker_alipay_principal 表的主键id */
	public int id;
	public String name;
	/** 支付宝配置文件类 */
	public Class<? extends BaseAlipayConfig> config;

	AlipayTransPrincipalEnum(int id, String name, Class<? extends BaseAlipayConfig> configClass) {
		this.id = id;
		this.name = name;
		this.config = configClass;
	}

	//####################################### 方便查找枚举值的方法 ###################################//

	static final EnumFindHelper<AlipayTransPrincipalEnum, Integer> IdHelper = new EnumFindHelper<>(AlipayTransPrincipalEnum.class, e -> e.id);

	static final EnumFindHelper<AlipayTransPrincipalEnum, String> NameHelper = new EnumFindHelper<>(AlipayTransPrincipalEnum.class, e -> e.name);

	public static AlipayTransPrincipalEnum findById(int id) {
		return IdHelper.find(id, UNKOWN);
	}

	public static AlipayTransPrincipalEnum findByName(String name) {
		return NameHelper.find(name, UNKOWN);
	}
}
